/*
 * app_thread_modules.h
 *
 *  Created on: 2024年6月27日
 *      Author: xhq
 */
#ifndef __SRC_APP_THREAD_MODULES_H__
#define __SRC_APP_THREAD_MODULES_H__

/* include */
#include <sys/prctl.h>
#include <sys/mman.h>
#include <sys/types.h>

#include "net_protocol.h"
#include "global_variables.h"
#include "typedef.h"
#include "bsp.h"
#include "bsp_net.h"
#include "rpmsg_modules.h"
#include "gtrack_int.h"
#include "bsp_msgqueue.h"

/* define */
#define     BASE_DATA_PROCESS_THREAD_NUM        4

/* typedef */
typedef enum
{
    DP_IDLE                    = 0,
    DP_BASE_PROCESS,
    DP_COMPLETE,
    DP_MAX
}DP_thread_state_etype;

/* 数据处理变量定义 */
typedef struct
{
    uint8_t   data_process_handle_num;                            // 线程数量
    uint8_t   data_buf_ptr_type;                                  // 数据处理类型
    
    struct dp_thread_param
    {
        uint8_t  DP_thread_state;                                 // 线程状态
        uint32_t DP_thread_need_handle_num;                       // 每个线程需要处理的数据
        uint32_t DP_thread_handle_start_idx;                      // 每个线程处理的数组开始索引
    }param[BASE_DATA_PROCESS_THREAD_NUM];
    
    // uint8_t   DP_thread_state[BASE_DATA_PROCESS_THREAD_NUM];      // 线程状态
    uint32_t  each_package_data_num;                              // 每包数据个数
    uint32_t  need_handle_data_package_num;                       // 待处理数据个数
    uint32_t  base_DP_ptr_head;                                   // 基础数据处理指针头
    uint32_t  base_DP_ptr_tail;                                   // 基础数据处理指针尾
    uint32_t  base_DP1_ptr_head;                                  // 基础数据处理1指针头
    uint32_t  base_DP1_ptr_tail;                                  // 基础数据处理1指针尾

}base_data_process_info_type;

/* global varibles */
// 原始mipi数据请求信息
G_EXT ORIGNAL_MIPI_REQ g_mipi_req_info;
//G_EXT uint8_t g_u8obj_info_buf[15 * 1024];
G_EXT uint8_t *g_obj_info_pu8_mmap;

/* private function */

/* function */
int first_create_thread(void);
int second_create_thread(void);
uint32_t data_process_modules_init(void);

/* 创建的线程 */
void *app_net_broadcast_recv_thread();
void *app_net_recv_thread();
void *app_net_send_mipi_thread();
void *app_net_send_info_thread();
void *app_net_send_dsp_thread();
void *app_data_pro_thread();
void *app_status_thread();

/* 子函数 */
uint32_t update_dsp_rpmsg_status_info();

#endif
